// css 通用关键字
const commonReg = /^inherit|^initial|^unset|^var|^calc/;

// 对多值进行切割处理 是补白等符合css写法习惯
const dealMultiValue = (value, fn) => {
  if (typeof value === "string") {
    value = value.split("/");

    return value
      .map((value) => {
        value = value.split(",");

        return value
          .map((value) => {
            value = value.split(" ");

            return value.map((value) => fn(value)).join(" ");
          })
          .join(",");
      })
      .join("/");
  }

  return fn(value);
};

// ----- 尺寸 ---- //
const sizeKeys = ["xxs", "xs", "sm", "md", "lg", "xl", "xxl"];
export function isSizeKey(size) {
  return sizeKeys.includes(size);
}

export function formatSize(size, prefix = "") {
  if (size === false) {
    return "";
  }

  prefix += prefix ? "-" : "";

  return isSizeKey(size) ? `var(--dx-size-${prefix}${size})` : size;
}

export function formatTextSize(size) {
  return formatSize(size, "text");
}

export function formatTitleSize(size) {
  return formatSize(size, "title");
}

export function formatGapSize(size) {
  return dealMultiValue(size, (value) => formatSize(value, "gap"));
}

export function formatRadiusSize(size) {
  return dealMultiValue(size, (value) => formatSize(value, "radius"));
}

export function formatTime(size) {
  return isSizeKey(size) ? `var(--dx-time-duration-${size})` : size;
}

// ---  颜色  ---//
// 通用颜色变量（不加bg|text前缀）
const keysReg = /gold|^score|success|warning|danger/;
// 原生颜色
const colorKeyReg = /^transparent|^rgb|^#|^hsl|^current|^!/;
/**
 * 判断是否是原始颜色值 如果是正常颜色名，则需要以！开头来标识
 * @param {*} color
 * @returns Boolean
 */
export function isOriginColor(color) {
  return !color || commonReg.test(color) || colorKeyReg.test(color);
}

/**
 * 转化颜色成变量格式
 * @param {*} color
 * @returns String
 */
export function formatColor(color, prefix = "") {
  if (color === false) {
    return "";
  }

  const isOrigin = isOriginColor(color);

  if (color === true) {
    color = "";
  } else if (/^!/.test(color)) {
    color = color.replace(/^!+/, "");
  }

  prefix += prefix ? "-" : "";

  return isOrigin ? color : `var(--vt-color-${prefix}${color})`;
}

export function formatTextColor(color) {
  const prefix = keysReg.test(color) ? "" : "text";

  return formatColor(color, prefix);
}

export function formatBgColor(color) {
  const prefix = keysReg.test(color) ? "" : "bg";

  return formatColor(color, prefix);
}
